Coursera week11
Photo Optical Character Recognition(写真の光学文字認識)
写真の光学文字認識は、機械に画像内にある文字を認識させようという試みで、以下のようなイメージです。
Photo OCRの例
https://gyazo.com/f53c0cceb90c75ad9c1db6b67ddf96c5
人間なら一瞬でできることですが、これを機械でやろうとすると、処理をいくつかの工程 (Pipeline)に分け、それぞれに必要な機械学習のアルゴリズムをあてがうことになります。今回の場合、以下のようなパイプラインになります。
Photo OCRのパイプライン
https://gyazo.com/5dce59169b10e5e4d39179dbdd5b20f7
①文章検出 (Text Detection)
文字を含んだ画像 ($ y = 1 )と文字を含んでいない画像($ y = 0 )を大量に用意し、アルゴリズムに学習させます。ラベル付きデータの分類なので、教師あり学習 (Supervised Learning) です。
https://gyazo.com/447c2209452dab3294136646cd18854e
②文字分離 (Character Segmentation)
文章を1文字ごとに分解したいので、$ y=1 は文字と文字の境界が見える画像、$ y=0 は、文字そのものが映っている、あるいは文字以外の何かが映っている画像を用います。
https://gyazo.com/5bed01c56ccccee90959890ab9a7de6d
③文字認識 (Character Recognition)
例えば、ターゲットの写真が100x100ピクセルだったとして、それのどこかに文字があるとします。その大きさは5x5ピクセルに収まる大きさかもしれませんし、50x50ピクセルじゃないと収まらない大きさかもしれません。
文字を検知するため、通常複数のピクセルサイズのスライディングウインドウ (Sliding Window)を使って画像に文字が含まれるか走査的 (scanning)に調べます。つまり、スライディングウィンドウが被った領域に、文字が含まれているかどうか機械学習のアルゴリズムで判定していくということです。
https://gyazo.com/60160ad970c8848406a528d423cc2bd5
Artificial Data Synthesis(人工データ合成)
人工データ合成は、大量のトレーニングデータが必要な場合により効率的にデータ収集することを助けてくれます。既存のデータを使い、物体を回転させたり、歪めたりすることによってデータ量を増やしてくれます。
https://gyazo.com/8906e0a27187fe2b7db7d94a60c09324
上の例だと、歪み (distortion)を導入することでデータ数を16倍に増やしています。こうしたテクニックを使うと、以下のようにオリジナルと変わらない質の人工合成データを作ることができます。
https://gyazo.com/222919d00aad38f64cdb458402390838
Ceiling Analysis(天井分析)
機械学習のパイプラインで、どの要素が最も改善できるポテンシャルがあるのか調べるには、天井分析 (Ceiling Analysis)を用います。
https://gyazo.com/2e17275302a33c8b21281fdf18c98fdb
上の表は、各要素と、その要素の精度が仮に100%だったときのシステム全体の精度をまとめたものです。上から順番に見ていきましょう。仮に100%の状態にするには、人が直接正解を与えるなど何でもいいです。これは、知りたいのは、天井(学習を限界までしたらどれだけシステム全体の精度が上がるか)だからです。
1. 現状のシステム全体の精度は72%です。
上手く学習すればまだまだ良くなりそう!
2. 文章検知のアルゴリズムがもし100%の精度だとしたら、システム全体の精度は89%に上がります。
17%も良くなりました!つまり、ここに人的リソースを割けば効率がいいことがわかります。
3. 文字分離のアルゴリズムがもし100%の精度だとしたら、システム全体の精度は90%に上がります。
1%しか上がっていません。ここにリソースを割くべきではないです。
4. 文字認識のアルゴリズムがもし100%の精度だとしたら、システム全体の精度は100%に上がります。
10%良くなりました。リソースを割くべきです。
このように、天井分析を先に行っておくことで、無駄な時間を割くことなく、効率よく時間や人的リソースを割り振ることができます。